//package org.jeecg.modules.paycenter.channel.tonglian;
//
//import cn.hutool.core.util.ObjectUtil;
//import org.apache.commons.codec.binary.Base64;
//import org.apache.commons.lang.StringUtils;
//
//import javax.crypto.Cipher;
//import javax.crypto.KeyGenerator;
//import javax.crypto.SecretKey;
//import javax.crypto.spec.SecretKeySpec;
//import java.security.*;
//import java.security.spec.PKCS8EncodedKeySpec;
//import java.security.spec.X509EncodedKeySpec;
//import java.util.Map;
//import java.util.Random;
//import java.util.TreeMap;
//
//public class SybUtil {
//
//
//    /**
//     * md5
//     *
//     * @param b
//     * @return
//     */
//    public static String md5(byte[] b) {
//        try {
//            MessageDigest md = MessageDigest.getInstance("MD5");
//            md.reset();
//            md.update(b);
//            byte[] hash = md.digest();
//            StringBuffer outStrBuf = new StringBuffer(32);
//            for (int i = 0; i < hash.length; i++) {
//                int v = hash[i] & 0xFF;
//                if (v < 16) {
//                    outStrBuf.append('0');
//                }
//                outStrBuf.append(Integer.toString(v, 16).toLowerCase());
//            }
//            return outStrBuf.toString();
//        } catch (NoSuchAlgorithmException e) {
//            e.printStackTrace();
//            return new String(b);
//        }
//    }
//
//    /**
//     * 判断字符串是否为空
//     *
//     * @param s
//     * @return
//     */
//    public static boolean isEmpty(String s) {
//        if (s == null || "".equals(s.trim()))
//            return true;
//        return false;
//    }
//
//    /**
//     * 生成随机码
//     *
//     * @param n
//     * @return
//     */
//    public static String getValidatecode(int n) {
//        Random random = new Random();
//        String sRand = "";
//        n = n == 0 ? 4 : n;// default 4
//        for (int i = 0; i < n; i++) {
//            String rand = String.valueOf(random.nextInt(10));
//            sRand += rand;
//        }
//        return sRand;
//    }
//
//
//    public static boolean validSign(TreeMap<String, String> param,
//                                    String appkey, String signType) throws Exception {
//        if (param != null && !param.isEmpty()) {
//            if (!param.containsKey("sign"))
//                return false;
//            String sign = param.remove("sign");
//            if ("MD5".equals(signType)) {// 如果是md5则需要把md5的key加入到排序
//                param.put("key", appkey);
//            }
//            StringBuilder sb = new StringBuilder();
//            for (Map.Entry<String, String> entry : param.entrySet()) {
//                if (entry.getValue() != null && entry.getValue().length() > 0) {
//                    sb.append(entry.getKey()).append("=")
//                            .append(entry.getValue()).append("&");
//                }
//            }
//            if (sb.length() > 0) {
//                sb.deleteCharAt(sb.length() - 1);
//            }
//            if ("MD5".equals(signType)) {
//                return sign.toLowerCase().equals(
//                        md5(sb.toString().getBytes("UTF-8")).toLowerCase());
//            } else {
//                return rsaVerifyPublickey(sb.toString(), sign, appkey, "UTF-8");
//            }
//        }
//        return false;
//    }
//
//    public static boolean rsaVerifyPublickey(String content, String sign,
//                                             String publicKey, String charset) throws Exception {
//        try {
//            PublicKey pubKey = getPublicKeyFromX509("RSA",
//                    Base64.decodeBase64(publicKey.getBytes()));
//            return rsaVerifyPublickey(content, sign, pubKey, charset);
//        } catch (Exception e) {
//            e.printStackTrace();
//            throw new Exception("RSAcontent = " + content + ",sign=" + sign
//                    + ",charset = " + charset, e);
//        }
//    }
//
//    public static boolean rsaVerifyPublickey(String content, String sign,
//                                             PublicKey pubKey, String charset) throws Exception {
//        try {
//            Signature signature = Signature
//                    .getInstance("SHA1WithRSA");
//
//            signature.initVerify(pubKey);
//
//            if (charset == null || "".equals(charset)) {
//                signature.update(content.getBytes());
//            } else {
//                signature.update(content.getBytes(charset));
//            }
//
//            return signature.verify(Base64.decodeBase64(sign.getBytes()));
//        } catch (Exception e) {
//            throw e;
//        }
//    }
//
//    public static String unionSign(TreeMap<String, String> params, String appkey,
//                                   String signType) throws Exception {
//
//        params.remove("sign");
//        if ("MD5".equals(signType)) {// 如果是md5则需要把md5的key加入到排序
//            params.put("key", appkey);
//        }
//        StringBuilder sb = new StringBuilder();
//        for (Map.Entry<String, String> entry : params.entrySet()) {
//            if (entry.getValue() != null && entry.getValue().length() > 0) {
//                sb.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
//            }
//        }
//        if (sb.length() > 0) {
//            sb.deleteCharAt(sb.length() - 1);
//        }
//        String sign = "";
//        if ("MD5".equals(signType)) {
//            sign = md5(sb.toString().getBytes("UTF-8")).toUpperCase();// 记得是md5编码的加签
//            params.remove("key");
//        } else {
//            sign = rsaSign(sb.toString(), appkey, "UTF-8");
//        }
//        return sign;
//    }
//
//
//    public static String rsaSign(String content, String privateKey,
//                                 String charset) throws Exception {
//        PrivateKey priKey = getPrivateKeyFromPKCS8("RSA",
//                Base64.decodeBase64(privateKey.getBytes()));
//        return rsaSign(content, priKey, charset);
//    }
//
//    public static String rsaSign(String content, byte[] privateKey,
//                                 String charset) throws Exception {
//        PrivateKey priKey = getPrivateKeyFromPKCS8("RSA", privateKey);
//        return rsaSign(content, priKey, charset);
//    }
//
//    public static String rsaSign(String content, PrivateKey priKey,
//                                 String charset) throws Exception {
//        Signature signature = Signature
//                .getInstance("SHA1WithRSA");
//        signature.initSign(priKey);
//        if (charset == null || "".equals(charset)) {
//            signature.update(content.getBytes());
//        } else {
//            signature.update(content.getBytes(charset));
//        }
//        byte[] signed = signature.sign();
//
//        return new String(Base64.encodeBase64(signed));
//    }
//
//    public static PrivateKey getPrivateKeyFromPKCS8(String algorithm,
//                                                    byte[] encodedKey) throws Exception {
//
//        KeyFactory keyFactory = KeyFactory.getInstance(algorithm);
//
//        return keyFactory.generatePrivate(new PKCS8EncodedKeySpec(encodedKey));
//    }
//
//    public static PublicKey getPublicKeyFromX509(String algorithm,
//                                                 byte[] encodedKey) throws Exception {
//        KeyFactory keyFactory = KeyFactory.getInstance(algorithm);
//
//        return keyFactory.generatePublic(new X509EncodedKeySpec(encodedKey));
//    }
//
//    public static String encryptAES(String plainText, String privateKey) {
//        try {
//            KeyGenerator kgen = KeyGenerator.getInstance("AES");
//            SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
//            random.setSeed(privateKey.getBytes());
//            kgen.init(128, random);
//            SecretKey secretKey = kgen.generateKey();
//            byte[] enCodeFormat = secretKey.getEncoded();
//            SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, "AES");
//            Cipher cipher = Cipher.getInstance("AES");
//            byte[] byteContent = plainText.getBytes("utf-8");
//            cipher.init(1, secretKeySpec);
//            byte[] byteRresult = cipher.doFinal(byteContent);
//            String sb = "";
//            byte[] arr$ = byteRresult;
//            int len$ = byteRresult.length;
//
//            for (int i$ = 0; i$ < len$; ++i$) {
//                byte element = arr$[i$];
//                String hex = Integer.toHexString(element & 255);
//                if (hex.length() == 1) {
//                    hex = '0' + hex;
//                }
//
//                sb = sb.concat(hex.toUpperCase());
//            }
//
//            return sb;
//        } catch (Exception var16) {
//            return null;
//        }
//    }
//
//    public static String decryptAES(String cipherText, String privateKey) {
//        try {
//            if (cipherText.length() < 1) {
//                return null;
//            } else {
//                byte[] byteRresult = new byte[cipherText.length() / 2];
//
//                for (int i = 0; i < cipherText.length() / 2; ++i) {
//                    int high = Integer.parseInt(cipherText.substring(i * 2, i * 2 + 1), 16);
//                    int low = Integer.parseInt(cipherText.substring(i * 2 + 1, i * 2 + 2), 16);
//                    byteRresult[i] = (byte) (high * 16 + low);
//                }
//
//                KeyGenerator kgen = KeyGenerator.getInstance("AES");
//                SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
//                random.setSeed(privateKey.getBytes());
//                kgen.init(128, random);
//                SecretKey secretKey = kgen.generateKey();
//                byte[] enCodeFormat = secretKey.getEncoded();
//                SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, "AES");
//                Cipher cipher = Cipher.getInstance("AES");
//                cipher.init(2, secretKeySpec);
//                byte[] result = cipher.doFinal(byteRresult);
//                return new String(result);
//            }
//        } catch (Exception var10) {
//            return null;
//        }
//    }
//}
